<?php
/**
 * alltosun.com  aliysms_helper.php
 * ============================================================================
 * 版权所有 (C) 2009-2013 北京互动阳光科技有限公司，并保留所有权利。
 * 网站地址: http://www.alltosun.com
 * ----------------------------------------------------------------------------
 * 许可声明：这是一个开源程序，未经许可不得将本软件的整体或任何部分用于商业用途及再发布。
 * ============================================================================
 * $Author: 王德康 (wangdk@alltosun.com) $
 * $Date: 2015-12-14 下午6:10:06 $
 * $Id: aliysms_helper.php 164470 2016-01-26 08:17:46Z wangdk $
 */
require MODULE_PATH.'/aliysms/helper/taobao-sdk/TopSdk.php';

class aliysms_helper
{

    /**
     * 发送短信
     * @param $sign_name 短信签名  string 抱抱堂
     * @param $sms_param 短信的模板变量 array 参数名列表 ： store_name:商店名, name:人名, order_id:订单号, phone_num:手机号, code:验证码或密码
     * @param $phone_num 手机号 string
     * @param $sms_res_name string 短信的模板编号别名
     * @return bool
     */
    public static function sms_send($sign_name, $sms_param, $phone_num, $sms_res_name)
    {
        //已禁用的用户不发送短信 author:xiaolin date:2016-10-24
        $user_ids = user_helper::get_user_ids_by_mobile($phone_num, array('status !=' => 1));
        if ($user_ids) {
            return false;
        }

        $conf = aliysms_config::$conf;
        $c = new TopClient;

        $c->appkey    = $conf['appkey'];
        $c->secretKey = $conf['secretkey'];

        $req = new AlibabaAliqinFcSmsNumSendRequest;

        // 公共回传参数 可以回传用户id,通过判断此用户id来判断时候发送的状态
        $req->setExtend("baobaotang");

        // 短信类型是normal
        $req->setSmsType("normal");

        // 短信签名
        $req->setSmsFreeSignName($sign_name);

        // 短信的模板变量
        $req->setSmsParam(json_encode($sms_param));

        // 手机号
        $req->setRecNum($phone_num);

        // 模板签名的编号
        $req->setSmsTemplateCode(aliysms_config::$sms_code_list[$sms_res_name]['sms_code']);

        $c->format = "json";
        $resp = $c->execute($req);
        if ($resp) {
            $resp = json_decode(json_encode($resp), true);

            if (isset($resp['result']) && isset($resp['result']['err_code']) &&  !$resp['result']['err_code']) {
                // 发送成功
                self::save_msg($phone_num, 5, $resp, 0, $sms_res_name, json_encode($sms_param));
                return true;
            } else {
                // 发送失败
                write_log($phone_num);
                write_log($sms_param);
                write_log($resp);

                self::save_msg($phone_num, 1, $resp, 0, $sms_res_name, json_encode($sms_param));
                return false;
            }
        }

        write_log($phone_num);
        write_log($sms_param);
        write_log($resp);

        // 发送失败
        self::save_msg($phone_num, 1, $resp, 0, $sms_res_name, json_encode($sms_param));
        return false;
    }

    /**
     * 保存信息
     * @param unknown_type $phone_num
     * @param unknown_type $status
     * @param unknown_type $return_info
     * @param unknown_type $sms_id
     * @param unknown_type $type
     * @param unknown_type $content
     */
    private static function save_msg($phone_num, $status, $return_info, $sms_id, $type, $content)
    {
        $data['mobile'] = $phone_num;
        $data['status'] = $status;
        $data['return_info'] = serialize($return_info);
        $data['sms_id'] = $sms_id;
        $data['type']   = $type;
        $data['content'] = $content;
        $data['send_sum'] = 1;

        return _model('sms_status')->create($data);
    }

}